package com.yqh.Map;

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.TreeMap;

/**
 * Map 集合的概述
 *
 * @author 阳秋豪
 * @createTime 2024/3/6
 */
public class Test1 {
    public static void main(String[] args) {
        /*------------------ 认识Map集合 ------------------*/
        // Map集合称为双列集合，格式:{key1=value1,key2=value2,key3=value3,…}，一次需要存一对数据做为一个元素
        // Map集合的每个元素“key=value”称为一个键值对/键值对对象/一个Entry对象，Map集合也被叫做"键值对集合"
        // Map集合的所有键是不允许重复的，但值可以重复，键和值是一一对应的，每一个键只能找到自己对应的值

        /*------------------ Map集合体系的特点 ------------------*/
        // 注意:Map系列集合的特点都是由键决定的，值只是一个附属品，值是不做要求的
        // HashMap(由键决定特点):无序、不重复、无索引;(用的最多)
        // LinkedHashMap (由键决定特点):有序、不重复、无索引。
        // TreeMap (由键决定特点):按照大小默认升序排序、不重复、无索引。

        /*------------------ Map集合体系的特点验证 ------------------*/
        Map<String, Integer> hashMap = new HashMap<>(); // 无序、不重复、无索引
        hashMap.put("张三", 20);
        hashMap.put("张三", 21); // 后面重复的数据会覆盖前面的数据
        hashMap.put("李四", 20);
        hashMap.put("王五", 20);
        hashMap.put(null, null);
        System.out.println(hashMap); // {null=null, 李四=20, 张三=21, 王五=20}
        System.out.println("-----------------------------");

        Map<String, Integer> LinkedHashMap = new LinkedHashMap<>(); // 有序、不重复、无索引
        LinkedHashMap.put("张三", 20);
        LinkedHashMap.put("张三", 21); // 后面重复的数据会覆盖前面的数据
        LinkedHashMap.put("李四", 20);
        LinkedHashMap.put("王五", 20);
        LinkedHashMap.put(null, null);
        System.out.println(LinkedHashMap); // {张三=21, 李四=20, 王五=20, null=null}
        System.out.println("-----------------------------");

        Map<Integer, String> treeMap = new TreeMap<>(); // 有序、不重复、无索引
        treeMap.put(20, "张三");
        treeMap.put(24, "张三");
        treeMap.put(22, "李四");
        treeMap.put(23, "王五");
        treeMap.put(20, "赵六"); // 后面重复的数据会覆盖前面的数据
        System.out.println(treeMap); // {20=赵六, 22=李四, 23=王五, 24=张三}
    }
}
